(function(C) {
	C.ui = C.ui || {};
	C
			.extend(
					C.ui,
					{
						plugin : {
							add : function(E, F, H) {
								var G = C.ui[E].prototype;
								for ( var D in H) {
									G.plugins[D] = G.plugins[D] || [];
									G.plugins[D].push([ F, H[D] ])
								}
							},
							call : function(D, E, G) {
								var H = D.plugins[E];
								if (!H) {
									return
								}
								for ( var F = 0; F < H.length; F++) {
									if (D.options[H[F][0]]) {
										H[F][1].apply(D.element, G)
									}
								}
							}
						},
						cssCache : {},
						css : function(D) {
							if (C.ui.cssCache[D]) {
								return C.ui.cssCache[D]
							}
							var E = C('<div class="ui-resizable-gen">')
									.addClass(D).css({
										position : "absolute",
										top : "-5000px",
										left : "-5000px",
										display : "block"
									}).appendTo("body");
							C.ui.cssCache[D] = !!((!/auto|default/.test(E
									.css("cursor"))
									|| (/^[1-9]/).test(E.css("height"))
									|| (/^[1-9]/).test(E.css("width"))
									|| !(/none/).test(E.css("backgroundImage")) || !(/transparent|rgba\(0, 0, 0, 0\)/)
									.test(E.css("backgroundColor"))));
							try {
								C("body").get(0).removeChild(E.get(0))
							} catch (F) {
							}
							return C.ui.cssCache[D]
						},
						disableSelection : function(D) {
							D.unselectable = "on";
							D.onselectstart = function() {
								return false
							};
							if (D.style) {
								D.style.MozUserSelect = "none"
							}
						},
						enableSelection : function(D) {
							D.unselectable = "off";
							D.onselectstart = function() {
								return true
							};
							if (D.style) {
								D.style.MozUserSelect = ""
							}
						},
						hasScroll : function(G, E) {
							var D = /top/.test(E || "top") ? "scrollTop"
									: "scrollLeft", F = false;
							if (G[D] > 0) {
								return true
							}
							G[D] = 1;
							F = G[D] > 0 ? true : false;
							G[D] = 0;
							return F
						}
					});
	C
			.each(
					[ "Left", "Top" ],
					function(E, D) {
						if (!C.fn["scroll" + D]) {
							C.fn["scroll" + D] = function(F) {
								return F != undefined ? this
										.each(function() {
											this == window || this == document ? window
													.scrollTo(
															D == "Left" ? F
																	: C(window)["scrollLeft"]
																			(),
															D == "Top" ? F
																	: C(window)["scrollTop"]
																			())
													: this["scroll" + D] = F
										})
										: this[0] == window
												|| this[0] == document ? self[(D == "Left" ? "pageXOffset"
												: "pageYOffset")]
												|| C.boxModel
												&& document.documentElement["scroll"
														+ D]
												|| document.body["scroll" + D]
												: this[0]["scroll" + D]
							}
						}
					});
	var B = C.fn.remove;
	C.fn
			.extend({
				position : function() {
					var F = this.offset();
					var E = this.offsetParent();
					var D = E.offset();
					return {
						top : F.top - A(this[0], "marginTop") - D.top
								- A(E, "borderTopWidth"),
						left : F.left - A(this[0], "marginLeft") - D.left
								- A(E, "borderLeftWidth")
					}
				},
				offsetParent : function() {
					var D = this[0].offsetParent;
					while (D
							&& (!/^body|html$/i.test(D.tagName) && C.css(D,
									"position") == "static")) {
						D = D.offsetParent
					}
					return C(D)
				},
				mouseInteraction : function(D) {
					return this.each(function() {
						new C.ui.mouseInteraction(this, D)
					})
				},
				removeMouseInteraction : function(D) {
					return this.each(function() {
						if (C.data(this, "ui-mouse")) {
							C.data(this, "ui-mouse").destroy()
						}
					})
				},
				remove : function() {
					jQuery("*", this).add(this).trigger("remove");
					return B.apply(this, arguments)
				}
			});
	function A(D, E) {
		return parseInt(C.curCSS(D.jquery ? D[0] : D, E, true)) || 0
	}
	C.ui.mouseInteraction = function(F, E) {
		var D = this;
		this.element = F;
		C.data(this.element, "ui-mouse", this);
		this.options = C.extend({}, E);
		C(F).bind("mousedown.draggable", function() {
			return D.click.apply(D, arguments)
		});
		if (C.browser.msie) {
			C(F).attr("unselectable", "on")
		}
		C(F).mouseup(function() {
			if (D.timer) {
				clearInterval(D.timer)
			}
		})
	};
	C
			.extend(
					C.ui.mouseInteraction.prototype,
					{
						destroy : function() {
							C(this.element).unbind("mousedown.draggable")
						},
						trigger : function() {
							return this.click.apply(this, arguments)
						},
						click : function(F) {
							if (F.which != 1
									|| C.inArray(F.target.nodeName
											.toLowerCase(),
											this.options.dragPrevention || []) != -1
									|| (this.options.condition && !this.options.condition
											.apply(this.options.executor
													|| this,
													[ F, this.element ]))) {
								return true
							}
							var E = this;
							var D = function() {
								E._MP = {
									left : F.pageX,
									top : F.pageY
								};
								C(document).bind("mouseup.draggable",
										function() {
											return E.stop.apply(E, arguments)
										});
								C(document).bind("mousemove.draggable",
										function() {
											return E.drag.apply(E, arguments)
										});
								if (!E.initalized
										&& Math.abs(E._MP.left - F.pageX) >= E.options.distance
										|| Math.abs(E._MP.top - F.pageY) >= E.options.distance) {
									if (E.options.start) {
										E.options.start.call(E.options.executor
												|| E, F, E.element)
									}
									if (E.options.drag) {
										E.options.drag.call(E.options.executor
												|| E, F, this.element)
									}
									E.initialized = true
								}
							};
							if (this.options.delay) {
								if (this.timer) {
									clearInterval(this.timer)
								}
								this.timer = setTimeout(D, this.options.delay)
							} else {
								D()
							}
							return false
						},
						stop : function(D) {
							var E = this.options;
							if (!this.initialized) {
								return C(document).unbind("mouseup.draggable")
										.unbind("mousemove.draggable")
							}
							if (this.options.stop) {
								this.options.stop.call(this.options.executor
										|| this, D, this.element)
							}
							C(document).unbind("mouseup.draggable").unbind(
									"mousemove.draggable");
							this.initialized = false;
							return false
						},
						drag : function(D) {
							var E = this.options;
							if (C.browser.msie && !D.button) {
								return this.stop.apply(this, [ D ])
							}
							if (!this.initialized
									&& (Math.abs(this._MP.left - D.pageX) >= E.distance || Math
											.abs(this._MP.top - D.pageY) >= E.distance)) {
								if (this.options.start) {
									this.options.start.call(
											this.options.executor || this, D,
											this.element)
								}
								this.initialized = true
							} else {
								if (!this.initialized) {
									return false
								}
							}
							if (E.drag) {
								E.drag.call(this.options.executor || this, D,
										this.element)
							}
							return false
						}
					})
})(jQuery);